% Ejercicio "Errores en la especificación LEX"
\section*{\fbox{\theejercicio} - Errores en la especificaci\'on LEX}

Para la siguiente especificaci\'on LEX, indicar qu\'e errores tiene: n\'umero de l\'{\i}nea y descripci\'on del error.

\begin{Programa}
\item \verb@%{@
\item \verb@%start I@
\item \verb@%}@
\item \verb@IF          [iIfF]@
\item \verb@%%@
\item \verb@[a-zA-Z][a-zA-Z0-9]*      {return ID, BEGIN I;}@
\item \verb@(0|1-9)[0-9]*.[0-9]+      {return CTE_REAL;)@
\item \verb@[0-9]+                    {return CTE_ENT;}@
\item \verb@[+-*/]                    {return OP;}@
\item \verb@[\t]*                     {return TAB;}@
\item \verb@(int|float)               {return TIPO;}@
\item \verb@\n                        ++numlinea;@
\item \verb@<IF>else                  {return FIN_IF;}@
\item \verb@("&&"|"||")               {return OP_LOGICO;}@
\item \verb@<I>char                   {return TIP_CHAR;}@
\item \verb@.*                        {error();}@
\end{Programa}

% Solución del ejercicio
\subsection*{SOLUCI\'ON}

\begin{tabular}{|c|c|p{4cm}|p{5.4cm}|} \hline
{\bf N$^\circ$} & {\bf L\'{\i}nea(s)} & {\bf Problema} & {\bf Correcci\'on} \\ \hline

\#1 & 2  & {\small La declaraci\'on de condici\'on de arranque \verb@%start I@ se copiar\'a \'{\i}ntegramente en la salida} & {\small \verb@%start I@ debe ir fuera de \verb@%{@ y \verb@%}@} \\ \hline

\#2 & 6  & {\small La sentencia {\tt BEGIN I;} no llegar\'a a ejecutarse tras un {\tt return}} & {\small La sentencia {\tt BEGIN I;} debe ir antes de {\tt return ID;}} \\ \hline

\#3 & 7  & {\small El car\'acter {\tt .} que simboliza un punto decimal, es un car\'acter reservado de LEX} & {\small El punto decimal debe escribirse \verb@"."@ o \verb@\.@} \\ \hline

\#4 & 9  & {\small El s\'{\i}mbolo {\tt -} en una posici\'on que no sea al principio o a final, sirve para expresar un rango} & {\small Debe ir al principio o al final} \\ \hline

\#5 & 10 & {\small El car\'acter {\tt *} es un operador de LEX que significa 0 o m\'as veces} & {\small Cambiar {\tt *} por {\tt +}} \\ \hline

\#6 & 11 & {\small No se alcanza nunca} & {\small Debe ir antes de la l\'{\i}nea 6} \\ \hline

\#7 & 12 & {\small Variable {\tt numlinea} no declarada} & {\small Hay que declarar {\tt numlinea}} \\ \hline

\#8 & 13 & {\small {\tt IF} es una definici\'on, no una condici\'on de arranque} & {\small Debe ir entre llaves \verb@{IF}@} \\ \hline

\#9 & 16 & {\small La epxresi\'on regular {\tt .*} se lo traga todo} & {\small Debe ir sin el operador {\tt *}} \\ \hline
\end{tabular}